C语言简介：
	时间：1970～1973 作者：丹尼斯.里奇 肯.汤普逊 地点：贝尔实验室
	目的：编写操作系统 UNIX->Linux BCPL->newB->C
	特点：速度快，语法简洁（32个关键字），功能强大（对硬件支持）。
	缺点：可用的库少，由于语法简洁导致代码不易阅读。
	
第一C程序：
/*
程序员所编写代码不是标准C代码，不能直接编译，它一段把它翻译成标准的C代码，负责翻译的程序叫预处理器，翻译的过程叫预处理，被翻译的代码叫预处理指令（以#开头）。
#include 导入一个头文件到源文件。
	.h 结尾的文件叫头文件，里面记录的大多数都是函数的开头（函数声明）；
	.c 结尾的文件叫源文件，里面记录的具体功能实现代码。
<> 从系统指定的目录加载头文件
"" 先从当前目录下加载头文件，如果找不到再从系统指定目录加载头文件。
	系统通过环境变量来指定加载头文件的目录。
stdio.h standard in out 记录的是与标准输入输出有关的辅助代码。
*/
#include <stdio.h>

/*
C语言以函数为管理代码的最小单位，一个函数就是一段具有某项功能的代码。
main函数是程序的默认入口(可以修改，但需要手动编程链接脚本)，有且只能有一个。
int是一种数据类型，放在函数名前表示函数的返回值是int类型，函数的返回值是就函数执行的结果，会交给函数的调用者。
main的调用者就是操作系统，因此main的返回值就交给的操作系统，被记录在了系统日志中。
main函数的返回值代表程序是以什么状态结束的：
	正数：表示程序出现异常
	负数：表示程序出现错误
	0：表示一切正常
	echo $?
在C语言中大括号用来划分区地盘，被大括号包含的代码表示属于一个整体。
*/

int main()
{
/*
标准库是C语言标准委员为C语言提供一些基础功能（以函数形式提供的），封装在libc库中。
printf/scanf是标准库中的函数，用来输入输出数据，一般用它来调试程序，项目在真正运行则不使用。
"字符串字面值，可以直接被printf输出"
	\n是一种转义字符，不能直接被表示的符号：
		\r 回到行首
		\b 退格
		\t 制表符，相当于按一下tab键
		\a 铃响
		%% 表示一个%
		\\ 表示一个\
C语言中以分号表示代码的结束，当代码太长时可以直接换行。
return：
	1、可以立即结束函数的执行，即使下面还有代码。
	2、把一个数据返回给函数的调用者。
*/
    printf("hello world!\n");
    return -1;
}

C代码是如何变量成可执行程序的：
	1、预处理	：gcc -E code.c 会把预处理的结束显示在屏幕上。
		gcc -E code.c -o code.i 把预处理的结果保存在文件中。
	2、汇编：gcc -s code.i 把标准的C代码翻译成汇编代码
		会生成一个以.s结尾的汇编文件。
	3、编译：gcc -c code.s 把汇编代码翻译成纯二进制代码
		会生成一个以.o结尾的目标文件，已经可以被执行，只是没有入口
	4、链接：gcc code1.o code2.o ... 把若干个.o文件合并成一个可以执行的文件。
	
C语言的数据类型：
	编程语言为什么要把数据进行分类？
	结构存储空间、提高运算速度。
	
	整型：
		signed 有符号整型,存储数据的二进制位的最高位用来表示正负，最高位也叫符号位，signed不加就代表加。
			char 		1	-128~127		
			short		2	-32768~32767 	(2^15)
			int			4	-2000000000~2000000000
			long		4/8
			long long	8
			
		unsigned 无符号整型，所有的二进制位都用来代表数据，只能表示正数，unsigned必须要加。
			char 			0~255
			short			0~65535     	(2^16)
			int				0~4000000000
			long
			long long
	浮点型：
		单精度：float		4
		双精度：double		8
		高精度：long double	12/16
		浮点型采用科学计数法来表示数据：符号位＋指数位＋尾数位。
		浮点型小数后六位有效，数据默认只显示小数点六位。
	char 字符就是符号或图案，在计算机以整数存储，当需要以字符形式显示时，计算机会根据ASCII表中的对应关系显示出相应的符号。
		48 '0'
		65 'A'
		97 'a'
		0  '\0'
	bool 在计算机界1980年以后才开始流行，因此C语言中不可能有真正的布尔类型，如果想使用需要包含stdbool.h头文件。
	true=1 false=0
	
变量：
	程序运行过程中可以修改的量，可以用来存放数据。
	定义：数据类型 变量名;
		1、由变量的功能确定变量的取值范围，根据变量的取值范围确定变量的类型。
		2、变量的默认值不确定，为了安全建议给一个初始值。
		3、变量的取名要符合规定、标准：
			1、由数字、字母、下划线组。
			2、不能以数字开头。
			3、不能与关键字重名。
			－－－－－－－－－－－－－
			4、尽量不要超过30个字符
			5、见名知意 变量名（使用范围，功能，类型）
	使用：赋值、参数运算
	变量的输出：printf 类型 变量名
		C语言中使用占位符的方式来告知变量的类型。
		signed:char,short,int,long,long long
			   %hhd,%hd,%d,%ld,%lld
		unsigned:char,short,int,long,long long
			   %hhu,%hu,%u,%lu,%llu
		浮点型：float,double,long double
			   %f,%lf,%LF
		字符型：char %c
	变量的输入：scanf 类型 变量地址＝&变量名
		注意：不带\n
常量：
	程序运算不能改变的量。
	字面值：
		1000 表示的是 int
		1000u 表示的是 unsigned int
		1000lu 表示的是 unsigned long
		1000llu 表示的是 unsigned long
		3.14 表示的是 double
		3.14f 表示的是 float
		"hehe" 表示的是 const char*
	受保护的变量:
		const int num;
		
	枚举值
	宏常量
	
运算符：
	算术运算符：+ - * / %
		/ % 除数不能为零，会出现"浮点数例外,(核心已转储)",导致程序死亡。
	关系运算符：> < >= <= == !=
		3 < num < 9 <=> 3 < num && num < 9;
		注意：C语言中的运算规则与数学中的不同。
		== 变量尽量放在右边，常量放在左边。
			100 = num; 会有错误提示
			num = 100; 变成了赋值语句
	自变运算符：++/--
		不要一个表达式中过多使用,不同的编译器对自变运算符的处理顺序不一样。
	逻辑运算符：&& || !
		&&、||具有短路特性,当运算左边的值已经可以确定表达式结果时，右边的不再计算，适当的利用短路特性可以写精简的分支结构。
		if(num < 100)
		{
			num++;
		}
		num < 100 && num++;
		!单目运算符，运算优先级别比&&、||高。
	赋值运算符及扩展：+= -= *= /= ...
		num *= 10+n;
		num = num * (10+n);
	三目运算符：[1]?[2]:[3];
		注意：不能使用流程控制语句，因为三目运算符始终是一个表达式必须要有一个结果。
	字节宽度运算符：sizeof
		sizeof不是函数，而是计算数据类型所点字节数的关键字。
		sizeof不计算小括号中的表达式，它只是推算表达式结果的类型然后计算这个类型所占的字节数。
	位运算符：& | ~ ^ >> << 
	
类型转换：
	自动类型转换
	强制类型转换
	
流程控制语句：
	分支：if switch
	循环：for,while,do while
	跳转:goto,break,continue,return
数组：
	一维数组
	二维数组
	变长数组
函数：
	标准库函数
	系统函数
	自定义函数
	
	
	
	
	
	
	
	
	
	
	
	
